//
//  NSString+LYExtension.h
//  Router
//
//  Created by cqck on 2021/11/3.
//

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, LYAESType) {
    LYAESType128,
    LYAESType256,
};

@interface NSString (LYExtension)

/**
 @brief 字符串格式化处理
 
 @param obj 未格式化的对象
 @return NSString 格式化后的字符串(如果是nil, null, @""格式化后统一返回@"")
 */
+ (NSString *)lyFormatStr:(id)obj;

/**
 @brief 判断是否是空字符串
 
 @param obj 对象
 @return BOOL YES空 NO非空
 */
+ (BOOL)lyIsEmptyStr:(id)obj;

/**
 @brief 判断是否是邮箱地址(包含非空验证)
 
 @param email 邮箱地址
 @return YES 验证通过 NO 未通过
 */
+ (BOOL)lyValidateEmail:(NSString *)email;

/**
 @brief 产生UUID

 @return NSString UUID字符串
 */
+ (NSString *)lyStringUUID;

/**
 @brief 设备唯一UUID

 @return NSString UUID字符串
 */
+ (NSString *)lyDeviceUUID;

/**
 @brief 获取App版本号

 @return NSString 版本号
 */
+ (NSString *)lyAppVersion;

/**
 @brief 获取App构建号

 @return NSString 构建号
 */
+ (NSString *)lyAppBuildVersion;

/**
 @brief 获取手机型号

 @return NSString 手机型号例如iPhone3,1
 */
+ (NSString *)lyDeviceName;

/**
 @brief 将字典或者数组转换成JSON字符串

 @param object 字典或者数组
 @return NSString 非字典或者数组返回空字符串
 */
+ (NSString *)objectToJsonStrWithObject:(id)object;

/**
 @brief 生成一个随机的16bit的字符串

 @return NSString 字符串
 */
+ (NSString *)randomlyGenerated16BitString;

/**
 @brief RSA加密

 @param content 待加密内容
 @param publicKey 加密公钥
 @return NSString 加密后的字符串
 */
+ (NSString *)lyRSAEncryptWithContent:(NSString *)content publicKey:(NSString *)publicKey;

/**
 @brief RSA解密

 @param content 待解密内容
 @param publicKey 解密公钥
 @return NSString 解密后的字符串
 */
+ (NSString *)lyRSADencodeWithContent:(NSString *)content publicKey:(NSString *)publicKey;

/**
 @brief 去掉html标签

 @param str 原字符串
 @return NSString 去掉后的字符串
 */
+ (NSString *)formatHTMLTagWithString:(NSString *)str;

/**
 @brief 转化string为sha1
 
 @return NSString 转化后的字符串
 */
- (NSString *)sha1String;

/**
 @brief 转化string为base64
 
 @return NSString 转化后的字符串
 */
- (NSString *)base64EncodedString;

/**
 @brief 转化string为MD5(32位小写)
 
 @return NSString 转化后的字符串
 */
- (NSString *)md5String;

/**
 @brief 转化string为MD5(32位大写)
 
 @return NSString 转化后的字符串
 */
- (NSString *)md5UpperString;

/**
 @brief 转化string为MD5(32位)
 
 @return NSString 转化后的字符串
 */
- (NSString *)md5NewString;

/**
 @brief 将base64字符串转化成NSData对象

 @return NSData 转化后的NSData对象
 */
- (NSData *)base64ToData;

/**
 @brief     跳转Safari浏览器
 */
- (void)lyOpenInSafari;

/**
 @brief AES加密

 @param type 加密类型
 @param key 加密key
 @return NSString 加密后的字符串
 */
- (NSString *)lyAESEncryptWithType:(LYAESType)type key:(NSString *)key;

/**
 @brief AES解密

 @param type 解密类型
 @param key 解密key
 @return NSString 解密后的字符串
 */
- (NSString *)lyAESDecryptWithType:(LYAESType)type key:(NSString *)key;

/**
 *@brief 字符串转整形(如果不是纯数字字符串则返回-9000)
 *
 *@return NSInteger 结果
 */
- (NSInteger)toInteger;

/**
 *@brief 字符串转浮点(如果不是纯数字字符串则返回-9000.0)
 *
 *@return CGFloat 结果
 */
- (CGFloat)toFloat;

/**
 *@brief JSON字符串转对象
 *
 *@return id 返回可能是字典或者数组，其他的都是nil
 */
- (id)jsonStrToObject;

/**
 *@brief 判断字符串是否全中文
 *
 *@return YES 全是中文 NO不全是
 */
- (BOOL)lyIsAllChinese;

@end
